perm filename NLF.SAI[SYS,HE]1 blob
sn#004240 filedate 1972-09-05 generic text, type T, neo UTF8
00100 BEGIN "NLF"
00200 REQUIRE "PREAMB.sai[SYS,HE]" SOURCE_FILE;
00300 REQUIRE 200 STRING_SPACE;
00400 DEFINE CRLF="'15&'12";
00500 PRELOAD_WITH 0, 0, 0.4, 1.0;
00600 SAFE REAL ARRAY SL[1:4];
00700 PRELOAD_WITH 0.00000, -1.00000, 0.00000, 10.0,
00800 -1.00000, 0.00000, 0.00000, 25.0,
00900 0.00000, 0.00000, -1.00000, 1.0,
01000 0.00000, 0.00000, 0.00000, 1.0;
01100 REAL ARRAY X1[1:4,1:4];
01200 PRELOAD_WITH 0.00000, -1.00000, 0.00000, 20.0,
01300 -1.00000, 0.00000, 0.00000, 25.0,
01400 0.00000, 0.00000, -1.00000, 1.2,
01500 0.00000, 0.00000, 0.00000, 1.0;
01600 REAL ARRAY X2[1:4,1:4];
01700 PRELOAD_WITH 0.00000, -1.00000, 0.00000, 30.0,
01800 -1.00000, 0.00000, 0.00000, 25.0,
01900 0.00000, 0.00000, -1.00000, 0.9,
02000 0.00000, 0.00000, 0.00000, 1.0;
02100 REAL ARRAY X3[1:4,1:4];
02200 PRELOAD_WITH -1.00000, 0.00000, 0.00000, 30.0,
02300 0.00000, 1.00000, 0.00000, 25.0,
02400 0.00000, 0.00000, -1.00000, 0.9,
02500 0.00000, 0.00000, 0.00000, 1.0;
02600 REAL ARRAY SQAR[1:4,1:4];
02700 PRELOAD_WITH 0,0,0,1;
02800 REAL ARRAY ZERO[1:4];
02900 INTEGER I,M;
03000 BOOLEAN FIRST;
03100 STRING S;
03200 LABEL L1;
03300 SIMPLE PROCEDURE SORRY;
03400 BEGIN OUTSTR("SORRY"&CRLF&CRLF);
03500 CALL(0,"EXIT");
03600 END;
03700
03800 SIMPLE PROCEDURE MOVE_IT(REAL ARRAY A,B);
03900 BEGIN INTEGER PLAN_SAV;
04000 A[3,4]←A[3,4]-1.00;
04100 B[3,4]←B[3,4]+1.0;
04200 ISSUE(5,"NLF","HAND",MESSAGE START_TRAJECTORY("HANOI",0));
04300 ISSUE(5,"NLF","HAND",MESSAGE OPEN_HAND(3));
04400 ISSUE(7,"NLF","HAND",MESSAGE MOVE_ARM(A,ARM_PLAN));
04500 IF ARM_PLAN THEN BEGIN
04600 ISSUE(5,"NLF","HAND",MESSAGE CLOSE_HAND(0.5));
04700 ISSUE(5,"NLF","HAND",MESSAGE MOVE_ARM(B,ARM_PLAN));
04800 ISSUE(5,"NLF","HAND",MESSAGE PLACE_ARM);
04900 ISSUE(7,"NLF","HAND",MESSAGE OPEN_HAND(3.0));
05000 IF (PLAN_SAV←ARM_PLAN) THEN BEGIN SQAR[1,4]←B[1,4];SQAR[2,4]←B[2,4];SQAR[3,4]←B[3,4]←B[3,4]-1;
05100 ISSUE(5,"NLF","HAND",MESSAGE ARM_CONO(SL,SL,0,0));
05200 ISSUE(5,"NLF","HAND",MESSAGE MOVE_ARM(SQAR,ARM_PLAN));
05300 ISSUE(5,"NLF","HAND",MESSAGE CLOSE_HAND(0.5));
05400 ISSUE(5,"NLF","HAND",MESSAGE OPEN_HAND(3.0));
05500 B[3,4]←B[3,4]+1;
05600 ISSUE(7,"NLF","HAND",MESSAGE CLOSE_TRAJECTORY);
05700 END;
05800 END;
05900 IF ¬PLAN_SAV THEN BEGIN
06000 OUTSTR("I CANNOT REACH THE BLOCK AT "
06100 &"("&CVS(A[1,4])&","&CVS(A[2,4])&")"&CRLF&
06200 "PLEASE MOVE IT TO "
06300 &"("&CVS(B[1,4])&","&CVS(B[2,4])&") AND TYPE C/R"&CRLF&CRLF);
06400 INCHWL;
06500 OUTSTR("THANK YOU"&CRLF&CRLF);
06600 END ELSE BEGIN
06700 ISSUE(7,"NLF","HAND",MESSAGE DO_IT("HANOI"));
06800 IF ARM_STATUS THEN OUTSTR(CVOS(ARM_STATUS)&" SORRY, YOU WILL HAVE TO DO IT FOR ME"&CRLF);
06900 END;
07000 END;
07100
07200 RECURSIVE PROCEDURE STACK(INTEGER H;REAL ARRAY A,B,C);
07300 BEGIN IF H=1 THEN
07400 BEGIN MOVE_IT(A,B);
07500 RETURN ;
07600 END;
07700 H←H-1;
07800 STACK(H,A,C,B);
07900 MOVE_IT(A,B);
08000 STACK(H,C,B,A);
08100 END;
00100 PUT_DATA(0,0,"NLF");
00200 WHILE ¬ YES_HAND DO CALL(1,"SLEEP");
00300 OUTSTR("DRIVE INITIALIZED"&CRLF&CRLF);
00400 ARRIVE_ARM[3]←DEPART_ARM[3]←2.0;
00500 DO BEGIN
00600 ISSUE(5,"NLF","HAND",MESSAGE START_TRAJECTORY ("H00000",0));
00700 ISSUE(5,"NLF","HAND",MESSAGE PARK_ARM);
00800 ISSUE(5,"NLF","HAND",MESSAGE OPEN_HAND(3));
00900 ISSUE(5,"NLF","HAND",MESSAGE CLOSE_TRAJECTORY);
00950 OUTSTR("STAND CLEAR OF THE ARM AND TYPE C/R
00975 ");
00987 INCHWL;
01000 ISSUE(7,"NLF","HAND",MESSAGE DO_IT("H00000"));
01100 IF ARM_STATUS THEN BEGIN OUTSTR(CVOS(ARM_STATUS)&" PLEASE CHECK THE ARM & TYPE C/R"&'15&'12);
01200 INCHWL;
01300 END;
01400 END UNTIL ¬ARM_STATUS;
01500 OUTSTR("PLACE BLOCKS AT (10,25) AND TYPE THE HEIGHT"
01600 &CRLF&CRLF);
01700 SETFORMAT(0,1);
01800 X1[3,4]←0.8;
01900 X2[3,4]←0.8;
02000 X3[3,4]←0.8;
02100 S←INCHWL;
02200 I←INTSCAN(S,M);
02300 IF I<1 THEN BEGIN OUTSTR("WE CANNOT MOVE BELOW THE TABLE"&CRLF&CRLF);
02400 SORRY;END;
02500 M←2↑I-1;
02600 OUTSTR("THAT'S "&CVS(M)& " MOVES, KEEP YOUR FINGERS CROSSED"&CRLF&CRLF);
02700 SETFORMAT(-5,0);
02800 X1[3,4]←X1[3,4]+I;
02900 ISSUE(5,"NLF","HAND",MESSAGE START_TRAJECTORY ("H00000",0));
03000 ISSUE(5,"NLF","HAND",MESSAGE MOVE_ARM(X1,ARM_PLAN));
03100 ISSUE(5,"NLF","HAND",MESSAGE CLOSE_TRAJECTORY);
03200 ISSUE(7,"NLF","HAND",MESSAGE DO_IT("H00000"));
03300 IF ARM_STATUS THEN OUTSTR(CVOS(ARM_STATUS)&" PLEASE CHECK THE ARM & TYPE C/R"&'15&'12);
03400 OUTSTR("THIS IS WHERE THE ARM THINKS THE BLOCKS SHOULD BE
03500 TYPE C/R TO PROCEED
03600 ");
03650 INCHWL;
03700 STACK(I,X1,X2,X3);
03800 M←ISSUE(5,"NLF","HAND",MESSAGE START_TRAJECTORY("HANOI",0));
03900 ISSUE(5,"NLF","HAND",MESSAGE PARK_ARM);
04000 ISSUE(7,"NLF","HAND",MESSAGE CLOSE_TRAJECTORY);
04100 ISSUE(7,"NLF","HAND",MESSAGE DO_IT("HANOI"));
04200 IF ARM_STATUS THEN OUTSTR("DID I HIT SOMEBODY!"&'15&'12) ELSE
04300 OUTSTR("IF THAT HAD BEEN 64 BLOCKS THE WORLD WOULD HAVE JUST ENDED!
04400 THANK YOU AND GOOD NIGHT."&CRLF&CRLF);
04500 END;